package ws;

import java.util.ArrayList;  
import java.util.Collection;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import orm.Coordenada;
import orm.DAOFactory;
import orm.dao.CoordenadaDAO;

import com.google.gson.Gson;

import safe.Encriptar;
import soapvo.CoordenadaSOAPVO;

public class CoordenadaSOA {
	
	public static int numeroAleatorio(int inicio,int cantidadNumeros){
		return (int) (Math.random() * cantidadNumeros + inicio);
	}
	
	
	public static String generarClave(){

		//String msj = "Mensaje a Encriptar";
		
		//Se instancia un objeto de la clase Encriptar y se define la key.
		String key = "apretandoparapasarelramo";
        Encriptar obj = new Encriptar(key);
        
        String mensaje = "Error";
		String clave1 = "";
		String clave2 = "";
		String clave3 = "";
		String letra[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
		
		clave1 = letra[(int) (Math.random()*10)];
		clave1 += (int) (Math.random()*5+1);
		clave2 = letra[(int) (Math.random()*10)];
		clave2 += (int) (Math.random()*5+1);
		clave3 = letra[(int) (Math.random()*10)];
		clave3 += (int) (Math.random()*5+1);
		
		if(clave1 != "" || clave2 != "" || clave3 != ""){
			
			//se instancia una coleccion de objetos
			Collection<CoordenadaSOAPVO> coordenada = new ArrayList<CoordenadaSOAPVO>();
			
			//se crea una instancia y se guarda la clave
			CoordenadaSOAPVO coorde1 = CoordenadaSOAPVO.crearCoordenadaSOAPVO(clave1);
			coordenada.add(coorde1);
			CoordenadaSOAPVO coorde2 = CoordenadaSOAPVO.crearCoordenadaSOAPVO(clave2);
			coordenada.add(coorde2);
			CoordenadaSOAPVO coorde3 = CoordenadaSOAPVO.crearCoordenadaSOAPVO(clave3);
			coordenada.add(coorde3);

			String json = null; 
			
			Gson gson = new Gson();
			json = gson.toJson(coordenada);
			
			System.out.println("A-Claves:     " + coordenada);
			System.out.println("B-salida json:     " + json);
			
			
		    //Encripta el mensaje
			String encriptadoCoord = obj.encriptar(json);
			System.out.println("C-Encriptado:    " + encriptadoCoord);
			System.out.println("D-Desencriptado:    " + obj.desencriptar(encriptadoCoord));
			
			return encriptadoCoord;
		}
		else{
			return mensaje;
		}
	}  

	
	public static String validarCoordenada(String encriptadoCoord) throws PersistentException{
		
		//Se instancia un objeto de la clase Encriptar y se define la key.
		String key = "apretandoparapasarelramo";
		//Se desencripta el objeto.
        Encriptar obj = new Encriptar(key);
        String clave = obj.desencriptar(encriptadoCoord);
        
        System.out.println("F-Desencriptado en metodo validar:     " + clave);
        
        
		PersistentTransaction pt = orm.PinPassPersistentManager.instance().getSession().beginTransaction();
		
		try {
			DAOFactory lDAOFactory = DAOFactory.getDAOFactory();
			CoordenadaDAO lormPinpassDAO = lDAOFactory.getCoordenadaDAO();
			//if?
			Coordenada lormCoordenada = lormPinpassDAO.loadCoordenadaByQuery("coo_clave like '%" + clave + "%'", null);
		
			String salida = "" + lormCoordenada.getCoo_valor();

			Gson gson = new Gson();
			salida = gson.toJson(salida);
			
			//Encripta el mensaje
			String encriptado2 = obj.encriptar(salida);
			System.out.println("G-Encriptado:    " + encriptado2);
			System.out.println("H-Desencriptado:    " + obj.desencriptar(encriptado2));
			
			pt.commit();
			
			return encriptado2;	
		} 
		
		catch (Exception e) {
			pt.rollback();
			return null;
		}
	}
	
	public static void main(String args[]) throws PersistentException{
	
		int numeros[] = {21, 80, 88, 98, 77, 66, 44, 55, 33, 22,
				 32, 18, 16, 15, 97, 76, 65, 45, 56, 34,
				 10, 26, 21, 43, 59, 91, 62, 42, 17, 12,
				 99, 11, 31, 73, 40, 50, 89, 61, 37, 42,
				 98, 19, 41, 23, 30, 20, 92, 86, 35, 27};
	
		int cual = numeroAleatorio(0, numeros.length);
		System.out.println(numeros[cual]);
		
	//-------------------------------------------------------------------	
		String clave = generarClave();
		
		//String key = "apretandoparapasarelramo";
		//Se desencripta el objeto.
		//Encriptar obj = new Encriptar(key);
		//String clave = obj.desencriptar(clave);
		
		String clave2 = validarCoordenada(clave);		
	}
}
